"""
认证中间件演示 - 展示新的 public_paths 方式
基于Linus设计哲学："默认保护，明确例外"
"""

from gua import GuaApp, respond, auth

app = GuaApp()

# 新的认证中间件：默认保护所有路径，只列出公开路径
app.use(auth(public_paths=["/login", "/register", "/health"], 
             auth_func=lambda token: token == "Bearer secret-token"))

@app.route("/")
async def home():
    """主页 - 需要认证"""
    return respond({"message": "欢迎来到受保护的主页"})

@app.route("/login")
async def login():
    """登录页面 - 公开访问"""
    return respond({"message": "登录页面", "status": "public"})

@app.route("/register")
async def register():
    """注册页面 - 公开访问"""
    return respond({"message": "注册页面", "status": "public"})

@app.route("/health")
async def health():
    """健康检查 - 公开访问"""
    return respond({"status": "ok", "message": "服务正常运行"})

@app.route("/api/users")
async def users():
    """用户API - 需要认证"""
    return respond({"users": ["alice", "bob", "charlie"]})

@app.route("/admin/dashboard")
async def admin_dashboard():
    """管理员仪表板 - 需要认证"""
    return respond({"message": "管理员仪表板", "data": "敏感信息"})

if __name__ == "__main__":
    import subprocess
    import sys
    
    # 使用gua命令显示示例启动信息
    result = subprocess.run([sys.executable, "-m", "gua.cli", "examples.auth_demo:app", "--example-info"],
                          capture_output=True, text=True)
    if result.returncode == 0:
        print(result.stdout)
    else:
        print("错误: 无法显示启动信息")
        print("请手动运行: gua examples.auth_demo:app --example-info")